﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Inventario_HardSoft.ADO
{
    class UserTable
    {
        ConexionDataContext conexion;
        
        #region Usuario
        //USUARIO
        public string codigo_Usuario { get; set; }
        public string Nombre_Usuario { get; set; }
        public string Sucursal_Usuario { get; set; }
        public string Area_Dpto_Usuario { get; set; }
        public string UserWindows_Usuario { get; set; }
        public string UserAS400DBS { get; set; } 
        #endregion

        #region Equipos
        //EQUIPO
        public string desktopmarca { get; set; }
        public string desktopmodelo { get; set; }
        public string desktopserie { get; set; }

        public string pantallamarca { get; set; }
        public string pantallamodelo { get; set; }
        public string pantallaserie { get; set; }

        public string tecladomarca { get; set; }
        public string tecladomodelo { get; set; }
        public string tecladoserie { get; set; }

        public string laptopmarca { get; set; }
        public string laptopmodelo { get; set; }
        public string laptopserie { get; set; }

        public string mousemarca { get; set; }
        public string mousemodelo { get; set; }
        public string mouseserie { get; set; }

        public string impresoramarca { get; set; }
        public string impresoramodelo { get; set; }
        public string impresoraserie { get; set; }

        public string impresoramatricialmarca { get; set; }
        public string impresoramatricialmodelo { get; set; }
        public string impresoramatricialserie { get; set; }

        public string discoexternomarca { get; set; }
        public string discoexternomodelo { get; set; }
        public string discoexternoserie { get; set; }

        public string modemusbmarca { get; set; }
        public string modemusbmodelo { get; set; }
        public string modemusbserie { get; set; } 
        #endregion

        #region Programas
        //PROGRAMAS
        public string windowsxp { get; set; }
        public string windows7 { get; set; }
        public string mcafee { get; set; }
        public string iexplore { get; set; }
        public string mflashplayer { get; set; }
        public string lotusnotes { get; set; }
        public string acrordr32 { get; set; }
        public string msoffice { get; set; }
        public string visoroffice { get; set; }
        public string winrar { get; set; }
        public string winzip { get; set; }
        public string visio { get; set; }
        public string project { get; set; }
        public string clientaccess { get; set; }
        public string vpn { get; set; }
        public string adryan { get; set; }
        public string rencot { get; set; }
        public string unicot { get; set; }
        public string spring { get; set; }
        public string dbs { get; set; }
        public string cotmail { get; set; }
        public string sisweb { get; set; }
        public string facturacionmanual { get; set; }
        public string regventas { get; set; }
        public string plancuentas { get; set; }
        public string preliquidaciones { get; set; }
        public string contratomarcos { get; set; }
        public string desconfirmadocumentos { get; set; }
        public string citrix_cuentascontactos { get; set; }
        public string citrix_sistmateriales { get; set; }
        public string citrix_sconcat { get; set; }
        public string citrix_comprarepuestos { get; set; }
        public string aplicacioneslotus { get; set; } 
        #endregion

        USUARIO user;
        List<EQUIPO> equipos;
        List<RELACION_EQUI_PROG> listProgAsignados;

        List<PROGRAMA> listProgramas;

        public UserTable()
        {
            listProgramas = this.getListProgramas();
        }        

        private void setUsuario(string codrrhh, string nombre, string sucursal, string area, string userwindows, string userdbs)
        {
            user = new USUARIO()
            {
                CODIGO_RRHH = codrrhh,
                NOMBRE = nombre,
                OFICINA = sucursal,
                DEPARTAMENTO = area,
                USUARIO_WINDOWS = userwindows,
                USUARIO_DBS = userdbs,
                FECHAREGISTRO = DateTime.Now,
                ELIMINADO = 0,
            };
        }

        private void asignarPrograma(string nombreprograma,string variable)
        {
            if (!string.IsNullOrWhiteSpace(variable))
            {
                foreach (PROGRAMA p in listProgramas)
                {
                    if (string.Equals(nombreprograma,p.NOMBREPROGRAMA,StringComparison.CurrentCultureIgnoreCase))
                    {
                        RELACION_EQUI_PROG rel = new RELACION_EQUI_PROG();
                        rel.IDPROGRAMA = p.IDPROGRAMA;

                        listProgAsignados.Add(rel);
                        break;
                    }
                }
            }
        }

        private void asignarEquipo(string tipoequipo, string marca, string modelo, string serie)
        {
            if (!string.IsNullOrWhiteSpace(tipoequipo) && !string.IsNullOrWhiteSpace(marca) && !string.IsNullOrWhiteSpace(modelo) && !string.IsNullOrWhiteSpace(serie))
            {
                //registramos el equipo
                EQUIPO eq = new EQUIPO()
                {
                    TIPOEQUIPO = tipoequipo,
                    MARCA = marca,
                    MODELO = modelo,
                    SERIE = serie,
                    ASIGNADO = 1,
                    FECHAREGISTRO = DateTime.Now,
                    ELIMINADO = 0
                };

                equipos.Add(eq);
            }
        }

        private List<PROGRAMA> getListProgramas()
        {
            return conexion.PROGRAMA.Where(x => x.ELIMINADO == 0).ToList<PROGRAMA>();
        }

        internal void asignarUsuario()
        {
            setUsuario(codigo_Usuario, Nombre_Usuario, Sucursal_Usuario, Area_Dpto_Usuario, UserWindows_Usuario, UserAS400DBS);
        }

        internal void asignarProgramas()
        {
            asignarPrograma("Windows XP",windowsxp);
            asignarPrograma("Windows 7", windows7);
            asignarPrograma("Antivirus McAfee",mcafee);
            asignarPrograma("Internet explorer",iexplore);
            asignarPrograma("Macromedia Flash Player",mflashplayer);
            asignarPrograma("Lotus Notes",lotusnotes);
            asignarPrograma("Adobe Acrobat Reader",acrordr32);
            asignarPrograma("Microsoft Office",msoffice);
            asignarPrograma("Visor de archivos Office",visoroffice);
            asignarPrograma("Winrar",winrar);
            asignarPrograma("Winzip",winzip);
            asignarPrograma("Visio",visio);
            asignarPrograma("Proyect",project);
            asignarPrograma("CLIENTES ACCESS",clientaccess);
            asignarPrograma("VPN",vpn);
            asignarPrograma("ADRYAN",adryan);
            asignarPrograma("RENCOT",rencot);
            asignarPrograma("UNICOT",unicot);
            asignarPrograma("SPRING",spring);
            asignarPrograma("DBS",dbs);
            asignarPrograma("COTMAIL",cotmail);
            asignarPrograma("SISWEB",sisweb);
            asignarPrograma("Facturación manual",facturacionmanual);
            asignarPrograma("Registro de ventas",regventas);
            asignarPrograma("Plan de cuentas",plancuentas);
            asignarPrograma("Pre Liquidaciones",preliquidaciones);
            asignarPrograma("Contrato marco",contratomarcos);
            asignarPrograma("Desconfirma documentos",desconfirmadocumentos);
            asignarPrograma("Citrix cuentas y contactos",citrix_cuentascontactos);
            asignarPrograma("Citrix sistema de materiales SMT",citrix_sistmateriales);
            asignarPrograma("Citrix sconcat",citrix_sconcat);
            asignarPrograma("Citrix compras de repuestos",citrix_comprarepuestos);
            asignarPrograma("Aplicaciones Lotus", aplicacioneslotus);
        }

        internal void asignarEquipos()
        {            
            asignarEquipo("Desktop",desktopmarca,desktopmodelo,desktopserie);
            asignarEquipo("Disco externo",discoexternomarca,discoexternomodelo,discoexternoserie);
            asignarEquipo("Impresora",impresoramarca,impresoramodelo,impresoraserie);
            asignarEquipo("Impresora matricial",impresoramatricialmarca,impresoramatricialmodelo,impresoramatricialserie);
            asignarEquipo("Laptop (Portatil)",laptopmarca,laptopmodelo,laptopserie);
            asignarEquipo("Modem USB",modemusbmarca,modemusbmodelo,modemusbserie);
            asignarEquipo("Mouse",mousemarca,mousemodelo,mouseserie);
            asignarEquipo("Pantalla",pantallamarca,pantallamodelo,pantallaserie);
            asignarEquipo("Teclado", tecladomarca, tecladomodelo, tecladoserie);
        }

        internal string registrarUsuario()
        {
            try
            {
                string idEmpresa = conexion.EMPRESA.Single(x => x.NOMBREEMPRESA == "Unimaq").IDEMPRESA;
                int contador = conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDUSUARIO.Value;

                String numero = Convert.ToString(contador);
                String numero2 = numero.Trim().PadLeft(5, '0');
                String iduser = "USU_" + numero2;

                user.IDUSUARIO = iduser;
                user.IDUSUARIO = idEmpresa;

                conexion.USUARIO.InsertOnSubmit(user);
                conexion.SubmitChanges();
                conexion.increm_ContadorUsuario();

                return iduser;
            }
            catch (Exception e)
            {                
                throw e.InnerException;
            }
        }

        internal string registrarEquipos(string idUsuario)
        {
            string result = "";

            try
            {
                foreach (EQUIPO eq in equipos)
                {
                    int ideq = conexion.INVENTARIO_CONTADOR.Single(x => x.IDENTIFICADOR == "HARDSOFT").CONT_IDEQUIPO.Value;
                    String numero = Convert.ToString(ideq);
                    String numero2 = numero.Trim().PadLeft(5, '0');
                    String idequipo = "EQUIP_" + numero2;

                    eq.IDEQUIPO = idequipo;
                    eq.IDUSUARIO = idUsuario;

                    if (string.Equals(eq.TIPOEQUIPO, "Desktop", StringComparison.CurrentCultureIgnoreCase) ||
                        string.Equals(eq.TIPOEQUIPO, "Laptop (Portatil)", StringComparison.CurrentCultureIgnoreCase) ||
                        string.Equals(eq.TIPOEQUIPO, "Laptop", StringComparison.CurrentCultureIgnoreCase))
                    {
                        result = eq.IDEQUIPO;
                    }

                    conexion.EQUIPO.InsertOnSubmit(eq);
                    conexion.SubmitChanges();
                    conexion.increm_ContadorIdEquipo();
                }
            }
            catch (Exception e)
            {                
                throw e.InnerException;
            }

            return result;
        }

        internal bool registrarProgramas(string idEquipo)
        {
            bool result = false;

            try
            {
                if (!string.IsNullOrWhiteSpace(idEquipo))
                {
                    foreach (RELACION_EQUI_PROG rel in listProgAsignados)
                    {
                        rel.IDEQUIPO = idEquipo;

                        conexion.RELACION_EQUI_PROG.InsertOnSubmit(rel);
                        conexion.SubmitChanges();

                        result = true;
                    }
                }
            }
            catch (Exception e)
            {                
                throw e.InnerException;
            }

            return result;
        }
    }
}


